build.gradle(Module)
dependencies {
...
// Rxjava
implementation 'io.reactivex.rxjava3:rxjava:3.1.5'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
// Retrofit & RxJava
implementation "com.squareup.retrofit2:adapter-rxjava3:2.9.0"
}
AndroidManifest.xml
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
// 傳統方式:Call<...>接口形式
public interface ApiService {
@GET("URL地址")
Call<ServerResponse> getResponse();
}
// RxJava方式:Obserable型別<...>接口方式
public interface ApiService {
@GET("URL地址")
Single<Response<ServerResponse>> getResponse();
}
// ----- 傳統方式 -----
// 1. 創建網路請求接口實例
ApiService apiService = retrofit.create(ApiService.class);
// 2. 採用Call<...>接口對發送請求進行封裝
Call<ServerRespnose> call = apiService.getResponse();
// 3. 發送網路請求(異步)
call.enqueue(new Callback<ServerResponse>() {
// 請求成功時回調
@Override
public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
// TODO
}
// 請求失敗時回調
@Override
public void onFailure(Call<ServerResponse> call, Thrwable throwable) {
// TODO
}
})
// ----- RJava方式 -----
// 1. 創建網路請求接口實例
ApiService apiService = retrofit.create(ApiService.class);
// 2. 採用Observable<...>形式對網路請求進行封裝
Observable<ServerResponse> observable = apiService.getResponse();
// 3. 發送網路請求(異步)
observable.subscribeOn(Schedulers.io()) // 在IO線程進行網路請求
.observeOn(AndroidSchedulers.mainThread()) // 回到主線程 處理請求結果
.subscribe(new new DisposableSingleObserver<Response<ServerResponse>>() {
// 請求成功時回調
@Override
public void onSuccess(@NonNull Response<ServerResponse> response) {
// TODO
}
// 請求失敗時回調
@Override
public void onError(@NonNull Throwable t) {
// TODO
}
});